#ifndef __BASE_TYPEDEF_H__
#define __BASE_TYPEDEF_H__

#define DISALLOW_COPY_AND_ASSIGN(classname) \
  private:                                  \
    classname(const classname &);           \
    classname &operator=(const classname &);

#define DISALLOW_IMPLICIT_CONSTRUCTORS(classname) \
  private:                                        \
    classname();                                  \
    DISALLOW_COPY_AND_ASSIGN(classname);

#define DECLARE_SINGLETON(classname)          \
  public:                                     \
    static classname *instance() {            \
      static classname instance;              \
      return &instance;                       \
    }                                         \
    DISALLOW_IMPLICIT_CONSTRUCTORS(classname) \
  private:

namespace base {
  typedef float dtype;
  typedef unsigned int  uint;
  typedef const char    cchar;
  typedef unsigned char uint8;
} // end namespace base

#endif // end __BASE_TYPEDEF_H__